iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

C++ AI 起步:編程進入智能世界系列 第 27

佇列演算法:串列實作佇列

  • 分享至 

  • xImage
  •  

在昨天的文章中,我們已經探討了如何使用陣列來實作佇列。不過,陣列的主要缺點是其大小是固定的。為了克服這個限制,我們可以使用串列來實作佇列,這樣就可以動態地增加或減少佇列的大小。

在本文中,我們將使用鏈式串列來實作一個簡單的佇列。

串列與佇列
鏈式串列是一種動態資料結構,可以有效地在其任何位置插入或刪除節點。由於佇列僅在尾部進行插入操作並在前端進行刪除操作,使用單鏈串列實作佇列是很直觀的。

使用串列實作佇列
以下是使用鏈式串列實作佇列的基本結構和操作:

#include <iostream>

class Node {
public:
    int data;
    Node* next;

    Node(int data) : data(data), next(nullptr) {}
};

class Queue {
private:
    Node* front;
    Node* rear;

public:
    Queue() : front(nullptr), rear(nullptr) {}

    bool isEmpty() {
        return front == nullptr;
    }

    void enqueue(int data) {
        Node* newNode = new Node(data);
        if (isEmpty()) {
            front = rear = newNode;
        } else {
            rear->next = newNode;
            rear = newNode;
        }
    }

    int dequeue() {
        if (isEmpty()) {
            std::cout << "Queue is empty!" << std::endl;
            return -1;
        }
        int value = front->data;
        Node* temp = front;
        front = front->next;
        delete temp;
        if (!front) {
            rear = nullptr;
        }
        return value;
    }

    int peek() {
        if (isEmpty()) {
            std::cout << "Queue is empty!" << std::endl;
            return -1;
        }
        return front->data;
    }
};

int main() {
    Queue q;
    q.enqueue(5);
    q.enqueue(10);
    q.enqueue(15);
    std::cout << "Front of the queue: " << q.peek() << std::endl; // 5
    q.dequeue();
    std::cout << "Front of the queue: " << q.peek() << std::endl; // 10
    return 0;
}

總結
使用串列來實作佇列允許我們動態地管理資料結構的大小,這是陣列所不能做到的。鏈式串列提供了一個彈性和動態的方法來實作佇列,使我們能夠根據需要來調整佇列的大小。


上一篇
佇列演算法:陣列實作佇列
下一篇
佇列演算法:環狀佇列
系列文
C++ AI 起步:編程進入智能世界32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言